/* function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} */
function HasSubtree(pRoot1, pRoot2)
{
    // write code here
    // 定义一个函数 这个函数用来判断 假如我的t1 和 t2 这两个树的根节点 假如是重合在一起 怎么判断是否含有一样的子结构是一个什么样的过程
    // 当t1 和 t2 的根节点重合时 判断 是否能找到这样一个子树和b是一样的结构
    function isSame(t1,t2){
      // 首先 假如t2 是一个空节点 说明t2 已经被遍历完了 需要返回true
      if(t2 === null) return true
      if(t1 === null) return false // 假如t2 不是空 那么说明t2 还没有被遍历完 此时t1 === null 所以 此时t2不可能是t1 的子结构
      if(t1.val !== t2.val){
        return false // 假如t1 和 t2 不相等 那么这两个值一定不可能含有相同的结构的
      }
      // 到到这行代码 说明 t1 和 t2 的节点值是相等的 那么这两个是可能还有相同的结构的
      return isSame(t1.left,t2.left) && isSame(t1.right,t2.right) // 判断左右子树是不是相同的  
    }
    if(pRoot2 === null || pRoot1 === null) return false
    if(isSame(pRoot1,pRoot2)) return true
    // 否则的话要在子树中去寻找 也就是说
    return HasSubtree(pRoot1.left,pRoot2) || HasSubtree(pRoot1.right,pRoot2) // 判断这些子树是否含有这样的结构
}
module.exports = {
    HasSubtree : HasSubtree
};